package com.leyou.dto;

import com.leyou.common.dto.BaseDTO;
import com.leyou.common.entity.BaseEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;

import java.util.Collection;
import java.util.Collections;
import java.util.List;
import java.util.stream.Collectors;

@Data
@NoArgsConstructor//为该类提供无参的构造方法
@EqualsAndHashCode(callSuper = false)//此注解会生成equals(Object other) 和 hashCode()方法。
//callSuper = false不调用父类的属性，那么子类属性里面的相同的话，那hashcode的值就相同
public class SpecParamDTO extends BaseDTO {
    private Long id;
    private Long categoryId;
    private Long groupId;
    private String name;
    private Boolean numeric;
    private String unit;
    private Boolean generic;
    private Boolean searching;
    private String segments;
    private String options;

    //todo 规格参数值
    private Object value;

    public SpecParamDTO (BaseEntity entity){
        super(entity);
    }
    public static <T extends BaseEntity>List<SpecParamDTO>convertEntityList(Collection<T>list){

 /*
 TODO
    Collections.emptyList();返回一个空的list集合
    此集合在返回前必须进行emptyList()集合的非空判断，当方法返回一个emptyList()时，不会报空指针异常，
    如果直接返回Null，没有进行非空判断就会报空指针异常
   注意：此List与常用的List不同，它是Collections类里的静态内部类，
       在继承AbstractList后并没有实现add()、remove()等方法，所以返回的List不能进行增加和删除元素操作。
   */
        if (list==null){
            return Collections.emptyList();
        }
        return list.stream()
                .map(SpecParamDTO::new)
                .collect(Collectors.toList());//todo 获取列表中所有用户的用户名集合
    }

}
